Итак, мы сделаем два приложения. Первое это ActiveX EXE в котором реализуем нашу поддержку VBA, а второе приложение клиент. Я убрал форму в ActiveX и изменил модуль инициализации.
Public vbas As Apc Public myapp As MyAppication Sub Main() Set myapp = New MyAppication Set vbas = New Apc End Sub
А в класс приложения добавил свойство hWndHost, и соответственно разделил инициализацию класса и показ среды.
'local variable(s) to hold property value(s) Private mvarhWndHost As Long 'local copy Public Property Let hWndHost(ByVal vData As Long) 'used when assigning a value to the property, on the left side of an assignment. 'Syntax: X.hWndHost = 5 mvarhWndHost = vData End Property Public Property Get hWndHost() As Long 'used when retrieving value of a property, on the right side of an assignment. 'Syntax: Debug.Print X.hWndHost hWndHost = mvarhWndHost End Property Public Sub Show() vbas.Ide.Visible = True End Sub Public Sub Init() vbas.LicenseKey = "16175148714896599659AFABD8ED3C2A416B45E4CD6F5484BD8CE1" vbas.ApplicationObject = myapp vbas.hWnd = mvarhWndHost End Sub
Создал приложение клиент.
В момент загрузки формы инициализирую класс, а в момент выбора меню показываю VBA среду.
Private Sub Form_Load() Set pr = New MyProject.MyAppication pr.hWndHost = Me.hWnd pr.Init End Sub Private Sub VBA_Click() pr.Show End Sub
В результате все показывается и переключается. Это уже хорошо.